package com.moss.cloud.common.core.model.dto;

import lombok.Data;

import java.io.Serializable;
import java.util.UUID;

@Data
public class MessageDTO implements Serializable {
    /**
     * 消息id
     */
    private String msgId;

    /**
     * 消息发送时间
     */
    private Long msgTime;

    /**
     * 消息所属产品（）
     */
    private String product;

    /**
     * 消息类型（ONE单条(点对点)|BATCH批量|ALL(广播)）
     */
    private String msgType;

    /**
     * 消息动作（ADD|DELETE|UPDATE|SHOW|NONE: 增|删|改|展示|无）
     */
    private String msgAction;

    /**
     * 操作人用户id
     */
    private Long userId;

    /**
     * 操作人用户名（登录名）
     */
    private String userName;

    /**
     * 终端id
     */
    private String clientId;

    /**
     * 消息语言
     */
    private String lang;

    /**
     * 消息体
     */
    private Serializable data;

    public MessageDTO() {
    }

    /**
     * constructor
     *
     * @param userId    userId
     * @param clientId  clientId
     * @param product   消息所属产品（会议-smt，工位-smw，地图-map）
     * @param msgType   消息类型（ONE单条(点对点)|BATCH批量|ALL(广播)）
     * @param msgAction 消息动作（ADD|DELETE|UPDATE|NONE: 增|删|改|无）
     * @param data      消息体
     */
    public MessageDTO(Long userId, String clientId, String product, String msgType, String msgAction,
                      Serializable data) {
        this.msgId = UUID.randomUUID().toString();
        this.msgTime = System.currentTimeMillis();
        this.userId = userId;
        this.clientId = clientId;
        this.product = product;
        this.msgType = msgType;
        this.msgAction = msgAction;
        this.data = data;
    }

    /**
     * constructor
     *
     * @param userId    userId
     * @param clientId  clientId
     * @param product   消息所属产品（会议-smt，工位-smw，地图-map）
     * @param msgType   消息类型（ONE单条(点对点)|BATCH批量|ALL(广播)）
     * @param msgAction 消息动作（ADD|DELETE|UPDATE|NONE: 增|删|改|无）
     * @param lang      语言
     * @param data      消息体
     */
    public MessageDTO(Long userId, String clientId, String product, String msgType, String msgAction,
                      String lang, Serializable data) {
        this.msgId = UUID.randomUUID().toString();
        this.msgTime = System.currentTimeMillis();
        this.userId = userId;
        this.clientId = clientId;
        this.product = product;
        this.msgType = msgType;
        this.msgAction = msgAction;
        this.lang = lang;
        this.data = data;
    }

    /**
     * constructor
     *
     * @param msgType   消息类型（ONE单条|BATCH批量）
     * @param msgAction 消息动作（ADD|DELETE|UPDATE: 增删改）
     * @param data      消息体
     */
    public MessageDTO(String msgType, String msgAction, Serializable data) {
        this.msgType = msgType;
        this.msgId = UUID.randomUUID().toString();
        this.msgTime = System.currentTimeMillis();
        this.msgAction = msgAction;
        /*this.userId = UserContextHolder.getUserId();*/
        this.data = data;
    }

    /**
     * constructor
     *
     * @param msgType   消息类型（ONE单条|BATCH批量）
     * @param msgAction 消息动作（ADD|DELETE|UPDATE: 增删改）
     * @param lang      语言
     * @param data      消息体
     */
    public MessageDTO(String msgType, String msgAction, String lang, Serializable data) {
        this.msgType = msgType;
        this.msgId = UUID.randomUUID().toString();
        this.msgTime = System.currentTimeMillis();
        this.msgAction = msgAction;
        /*this.userId = UserContextHolder.getUserId();*/
        this.lang = lang;
        this.data = data;
    }
}
